<?php

/**
 * Model che rappresenta un agente nel DB.
 */
class Agente extends StdModel
{

	private static $singleton = NULL;

	/**
	 * Ritorna una istanza globale di questo model.
	 * @return mixed La istanza globale.
	 */
	public static function getInstance()
	{
		if(self::$singleton == NULL)
			self::$singleton = new Agente();
		return self::$singleton;
	}

	/*
	 * Specifiche attributi del tipo del Model rappresentato da questa classe
	 */
	public $attribTableName = "Agente";
	public $attribLabel = array("Nome", "Cognome");
	public $attribNames = array(STD_ID, "Nome", "Cognome", "PartitaIva", "CodiceFiscale", "Banca", "Iban");
	public $attribExcludeFromAdd = array(STD_ID);
	public $attribExcludeFromEdit = array(STD_ID);
	public $attribLongNames = array(STD_ID => "ID", "Nome" => "Nome", "Cognome" => "Cognome",
		"PartitaIva" => "Partita IVA", "CodiceFiscale" => "Codice fiscale", "Banca" => "Banca", "Iban" => "IBAN");
	public $attribIsImportant = array(STD_ID => 2, "Nome" => 1, "Cognome" => 1,
		"PartitaIva" => 0, "CodiceFiscale" => 0, "Banca" => 0, "Iban" => 0);
	public $attribIsNumeric = array(STD_ID => true, "Nome" => false, "Cognome" => false, "PartitaIva" => false,
		"CodiceFiscale" => false, "Banca" => false, "Iban" => false);
	public $attribIsForeignKey = array(STD_ID => false, "Nome" => false, "Cognome" => false, "PartitaIva" => false,
		"CodiceFiscale" => false, "Banca" => false, "Iban" => false);

	/*
	 * Specifiche per gli elementi form associati agli attributi
	 */
	private static $attribHTMLFormValue = array( STD_ID => FORM_HIDDEN, "Nome" => FORM_TEXT, "Cognome" => FORM_TEXT,
		"PartitaIva" => FORM_TEXT, "CodiceFiscale" => FORM_TEXT, "Banca" => FORM_TEXT, "Iban" => FORM_TEXT);
	private static $attribHTMLFormIsMandatory = array( STD_ID => true, "Nome" => true, "Cognome" => true,
		"PartitaIva" => false, "CodiceFiscale" => false, "Banca" => false, "Iban" => false);

	/**
	 * Restituisce l'HTML per creare un campo di un form adatto a contenere il
	 * valore dell'attribbuto passato. Questo campo di testo sarà vuoto e dovrà
	 * servire per la creazione di una nuova istanza in DB di questo model.
	 * @param string $attribName Nome dell'attributo su cui creare il campo.
	 * @return string Stringa contenente l'HTML dell'elemento creato.
	 */
	public function getAddFormCodeFromAttribute($db,$attribName)
	{
		if(!isset(self::$attribHTMLFormValue[$attribName]) || $attribName == STD_ID)
			return "";
		switch(self::$attribHTMLFormValue[$attribName])
		{
			case FORM_TEXT: return ModelUtils::getTextFormElement($attribName, "", self::$attribHTMLFormIsMandatory[$attribName]);
			default: return "";
		}
	}

	/**
	 * Restituisce l'HTML per creare un campo di testo adatto a contenere il
	 * valore dell'attribbuto passato. Questo campo di testo conterrà il valore
	 * attualmente assunto da questo attributo in questa tupla.
	 * @param DatabaseManager $db Database su cui effettuare una possibile
	 * interrogazione.
	 * @param string $attribName Nome dell'attributo di cui creare il codice.
	 * @return string Il codice HTML dell'elemento form corrispondente.
	 */
	public function getEditFormCodeFromAttribute($db, $attribName)
	{
		switch(self::$attribHTMLFormValue[$attribName])
		{
			case FORM_HIDDEN: return ModelUtils::getHiddenFormElement($attribName, $this->dataTupla[$attribName], self::$attribHTMLFormIsMandatory[$attribName]);
			case FORM_TEXT: return ModelUtils::getTextFormElement($attribName, $this->dataTupla[$attribName], self::$attribHTMLFormIsMandatory[$attribName]);
			default: return "";
		}
	}

	/**
	 * Costruttore che acquisisce l'array dei valori associativi.
	 * @param type $data L'array associativo a cui inizializzare questa istanza.
	 */
	public function __construct($data = NULL)
	{
		parent::__construct($data);
	}

	/**
	 * Crea una nuova istanza della sottoclasse specializzante.
	 * @param array $data I dati passati da cui recuperare i valori.
	 * @return mixed Una nuova instanza della sottoclasse specializzante.
	 */
	public function createNew($data)
	{
		return new Agente($data);
	}

}

?>
